Problem
Shallot
Description
小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏。
每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且让小葱从自己手中的小葱苗里选出一些小葱苗使得选出的小葱苗上的数字的异或和最大。
这种小问题对于小葱来说当然不在话下,但是他的身边没有电脑,于是他打电话给同为选手的你,你能帮帮他吗?
你只需要输出最大的异或和即可,若小葱手中没有小葱苗则输出0
。
Input
第一行一个正整数表示总时间。
第二行个整数,若大于代表给了小葱一颗数字为的小葱苗,否则代表从小葱手中拿走一颗数字为的小葱苗。
Output
Sample Input
1 | 6 |
Sample Output
1 | 1 |
HINT
,。
标签:线段树分治
线性基
Solution
线性基只支持插入,不支持删除,而每个数的存在时间为一个区间,于是需要用线段树分治。
将每个数存在的时间区间预处理出来,分为个插入线段树的个结点中。然后遍历一遍线段树,处理出每个点到根的路径上所有数组成的线性基(即其父亲的线性基插入在这个点上的所有数)。当访问到长度为的区间时,即可回答当前时间点的询问。总时间复杂度。
Code
1 |
|